<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <style>
      .slider-bar {
        position: absolute;
        left: 50%;
        top: 300px;
        margin-left: 600px;
        width: 45px;
        height: 130px;
        background-color: pink;
      }

      .w {
        width: 1200px;
        margin: 10px auto;
      }

      .header {
        height: 150px;
        background-color: purple;
      }

      .banner {
        height: 250px;
        background-color: skyblue;
      }

      .main {
        height: 1000px;
        background-color: yellowgreen;
      }

      span {
        display: none;
        position: absolute;
        bottom: 0;
      }
    </style>
  </head>

  <body>
    <div class="slider-bar">
      <span class="goBack">返回顶部</span>
    </div>
    <div class="header w">头部区域</div>
    <div class="banner w">banner区域</div>
    <div class="main w">主体部分</div>
    <script>
      var sliderBar = document.querySelector(".slider-bar");
      var goBack = document.querySelector(".goBack");
      var banner = document.querySelector(".banner");
      var main = document.querySelector(".main");
      var juli = sliderBar.offsetTop - banner.offsetTop;
      document.addEventListener("scroll", function () {
        if (pageYOffset >= banner.offsetTop) {
          sliderBar.style.position = "fixed";
          sliderBar.style.top = juli + "px";
        } else {
          sliderBar.style.position = "absolute";
          sliderBar.style.top = 300 + "px";
        }
        if (pageYOffset >= main.offsetTop) {
          goBack.style.display = "block";
        } else {
          goBack.style.display = "none";
        }
      });
      goBack.addEventListener("click", function () {
        // window.scroll(0, 0);
        animate(window, 0);
      });
      function animate(obj, target, callback) {
        //先清除以前的定时器，只保留当前的一个定时器执行
        clearInterval(obj.timer);
        obj.timer = setInterval(function () {
          var step = (target - window.pageYOffset) / 10;
          step = step > 0 ? Math.ceil(step) : Math.floor(step);
          if (window.pageYOffset == target) {
            clearInterval(obj.timer);
            if (callback) {
              callback();
            }
          }
          window.scroll(0, window.pageYOffset + step);
          //   obj.style.left = obj.offsetLeft + step + "px";
        }, 30);
      }
    </script>
  </body>
</html>
